package com.zzh;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        List<String> name = new ArrayList<>();
        name.add("张三");
        name.add("张三1");
        name.add("张三2");
        name.add("张三3");
        name.add("赵三4");
        name.add("王三5");
        name.add("王三6");
        name.add("赵三7");

        List<String> list1 = new ArrayList<>();

        name.forEach(s1->{
            if(s1.startsWith("张")){
                list1.add(s1);
            }
        });
        List<String> list2 = new ArrayList<>();
        list1.forEach(s2->{
            if(s2.length() == 3){
                list2.add(s2);
            }
        });

        list2.forEach(System.out::println);

        System.out.println("-----------------------------------");


        name.stream()
                .filter(s->s.startsWith("张"))
                .filter(s->s.length() == 3)
                .forEach(System.out::println);

    }

    @Test
    public void test1(){

        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);

//        List<Integer> list1 = list.stream()
//                .filter(integer -> integer % 2 == 0)
//                .collect(Collectors.toList());

        List<Integer> list1 = list.stream()
                .filter(integer -> integer % 2 == 0)
                .toList();
        System.out.println(list1);


    }

    @Test
    public void  test2(){
    List<String> list = new ArrayList<>();
    list.add("zhangsan,23");
    list.add("lisi,24");
    list.add("wangwu,25");
    //过滤年纪大于等于24岁的人
        Map<String, String> map =list.stream()
            .filter(s -> {
        //切开字符
        String[] split = s.split(",");
        //获得年龄
        int age = Integer.parseInt(split[1]);
        return age  >= 24;
    }).collect(Collectors.toMap(s -> {
        String[] split = s.split(",");
        return split[0];
        }, s -> {
        String[] split = s.split(",");
        return split[1];
    }));

        map.forEach((k,v)->{
            System.out.println(k + "--" + v);
        });

    }
    //流的合并操作
    @Test
    public void test3(){
        List<String> list1 = new ArrayList<>();
        list1.add("佟大为");
        list1.add("黄渤");
        list1.add("张学友");
        list1.add("邓超");
        list1.add("成龙");
        list1.add("李连杰");

        List<String> list2 = new ArrayList<>();
        //女演员
        list2.add("赵丽颖");
        list2.add("林志玲");
        list2.add("杨幂");
        list2.add("杨紫");
        list2.add("迪丽热巴");
        list2.add("高圆圆");
        list2.add("古力娜扎");

        Stream<String> Stream1 = list1.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length() == 3;
            }
        }).limit(2);

        Stream<String> Stream2 = list2.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("杨");
            }
        }).skip(1);

        //合并流
        Stream.concat(Stream1,Stream2).forEach(System.out::println);

    }

}
